package com.leo.platform.shop.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.leo.platform.common.dao.BaseDao;
import com.leo.platform.shop.entity.procategory.ProCategory;

@org.apache.ibatis.annotations.Mapper
public interface ProCategoryDao extends BaseDao<ProCategory, Long> {

    /**
     * 根据品牌id查询商品分类
     */
    @Select("SELECT * FROM bsp_procategory WHERE id IN (SELECT categoryId FROM bsp_procategoryref WHERE entityCode = #{entityCode} and entityType='brand') ")
        List<ProCategory> queryByBrandId(@Param("code") Long entityCode);

    /**
     * 根据categoryid删除中间表中相关数据 注意：该函数会删除所有与该category相关的类目信息
     */
    @Delete("DELETE FROM bsp_procategoryref WHERE categoryId = #{categoryId}")
    void deleteByCategoryIdInCategoryRef(@Param("categoryId") Long categoryId);

    /**
     * 根据id查询名字
     */
    @Select("SELECT cname FROM bsp_category WHERE id = #{categoryId}")
    String queryNameById(Long categoryId);

    /**
     * 根据父节点id查找子节点的类目 是要在proCategoryRef中通过entityCode查找categoryId， 再通过CategoryId查找category
     * Dao层需要关联ProCategory和ProCategoryRef根据entityCode， 因为是根据父节点查找子节点，因此entityCode中保存的是子节点，
     * 根据entityCode把ProCategory和ProCategoryRef关联， 再根据ProCategoryRef中的categoryId查找出所有父节点，就可以返回
     */
    @Select("SELECT b.* FROM bsp_category b LEFT JOIN bsp_procategoryref cb ON b.code=cb.entityCode WHERE cb.categoryId=#{categoryId} AND cb.entityType='brand'")
        List<ProCategory> queryCategoryByPid(Long categoryId);
}